﻿using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Globalization;
using System.Web.Mvc;
using System.Web.Security;

namespace MvcTestApp.Models
{

    public class ChangePasswordModel
    {
        [Required]
        [DataType(DataType.Password)]
        [Display(Name = "Current password")]
        public string OldPassword { get; set; }

        [Required]
        [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
        [DataType(DataType.Password)]
        [Display(Name = "New password")]
        public string NewPassword { get; set; }

        [DataType(DataType.Password)]
        [Display(Name = "Confirm new password")]
        [Compare("NewPassword", ErrorMessage = "The new password and confirmation password do not match.")]
        public string ConfirmPassword { get; set; }
    }

    public class LogOnModel
    {
        [Required]
        [Display(Name = "User name")]
        public string UserName { get; set; }

        [Required]
        [DataType(DataType.Password)]
        [Display(Name = "Password")]
        public string Password { get; set; }

        [Display(Name = "Remember me?")]
        public bool RememberMe { get; set; }
    }

    public class RegisterModel
    {
        [Required]
        //[Display(Name = "User name")]
        [MyCustomValidation]
        public string UserName { get; set; }

        [Required]
        [DataType(DataType.EmailAddress)]
        [Display(Name = "Email address")]
        public string Email { get; set; }

        [Required]
        [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
        [DataType(DataType.Password)]
        [Display(Name = "Password")]
        public string Password { get; set; }

        [DataType(DataType.Password)]
        [Display(Name = "Confirm password")]
        [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
        public string ConfirmPassword { get; set; }

        public string GetName()
        {
            return this.UserName;
        }
    }

    #region Code for Custom Validation

    /// <summary>
    /// This is the First Step for a Custom Validation from Server Side 
    /// Define a Custom Validation Attribute
    /// </summary>
    [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
    public class MyCustomValidationAttribute : ValidationAttribute, IClientValidatable
    {
        private String key = "Tutul";
        public MyCustomValidationAttribute()
            : base("Please Enter a Valid User Name Containing Tutul")
        {
        }

        public override bool IsValid(object value)
        {
            String userName = value as String;
            if (userName.Contains(key))
                return true;

            return false;
        }

        //public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        //{
        //    //var rule = new ModelClientPriceRangeValidationRule("The price is not in a valid range.", this.minPrice, this.maxPrice);
        //    var rule = new ModelClientPriceRangeValidationRule("The price is not in a valid range.", this.key);
        //    yield return rule;
        //}

        public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            yield return new ModelClientValidationRule
            {
                ErrorMessage = FormatErrorMessage(metadata.DisplayName),
                ValidationType = "mycustomvalidation"
            };
        }
    }

    //public class ModelClientPriceRangeValidationRule : ModelClientValidationRule
    //{        
    //    public ModelClientPriceRangeValidationRule(string errorMessage, String key)
    //    //public ModelClientPriceRangeValidationRule(string errorMessage, decimal minPrice, decimal maxPrice)
    //    {
    //        ErrorMessage = errorMessage;
    //        ValidationType = "priceOnRange";
    //        ValidationParameters.Add("Key", key);
    //        //ValidationParameters.Add("minPrice", minPrice);
    //        //ValidationParameters.Add("maxPrice", maxPrice);
    //    }
    //}



    #endregion Code for Custom Validation
}
